﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using WTwitter.Model.Framework;
using WTwitter.Model.Twitter;
using WTwitter.Model.Twitter.Json;
using WTwitter.Model.UserData;
using WTwitter.Model.Twitter.Utility;

namespace WTwitter.Model.Twitter {
	public class TwitterUser : IUser {
		private User _source;

		public TwitterUser(User source) {
			_source = source;
		}

		/// <summary>
		/// このユーザーがフォローしているIDのリスト
		/// 事前にLoadFollowingIds()を呼び出すまではnullになっている
		/// 最新のFollowingIdsを調べたいときは再度LoadFollowingIdsを呼び出す
		/// </summary>
		public List<long> FollowingIds {
			get;
			private set;
		}

		public void LoadFollowingIds(AuthInfo info) {
			FollowingIds = SocialGraphMethod.FriendsIds(info, this);
		}

		/// <summary>
		/// このユーザーをフォローしているIDのリスト
		/// 事前にLoadFollowersIds()を呼び出すまではnullになっている
		/// 最新のFollowersIdsを調べたいときは再度LoadFollowersIdsを呼び出す
		/// </summary>
		public List<long> FollowersIds {
			get;
			private set;
		}

		public void LoadFollowersIds(AuthInfo info) {
			FollowersIds = SocialGraphMethod.FollowersIds(info, this);
		}

		#region IUser メンバ

		public long? Id {
			get { return _source.Id; }
		}

		public string ScreenName {
			get { return _source.ScreenName; }
		}

		public string Name {
			get { return _source.Name; }
		}

		public string UserUrl {
			get { return @"http://www.twitter.com/" + _source.ScreenName; }
		}

		public string Description {
			get { return _source.Description; }
		}

		public string ProfileImageUrl {
			get { return _source.ProfileImageUrl; }
		}

		public bool IsFriend {
			get { throw new NotImplementedException(); }
		}

		public bool IsFollowing {
			get { return _source.Following ?? false; }
		}

		public bool IsFollowed {
			get { throw new NotImplementedException(); }
		}

		#endregion

		#region IEquatable<IUser> メンバ

		public bool Equals(IUser other) {
			return this.ScreenName.Equals(other.ScreenName);
		}

		#endregion
	}
}
